# pip install selenium==3.141.0 webdriver-manager==3.8.6 urllib3==1.26.18
import time
from selenium.webdriver.common.by import By
import pytest
from selenium import webdriver
from baseTools.my_logger import myLog
import traceback
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from webdriver_manager.microsoft import EdgeChromiumDriverManager
from config import *

"""
    1 初始化浏览器
    设置隐式暂停时间
    浏览器最大化
    初始化后，内存会被回收，所以浏览器也会自动关闭
    """
def create_get_driver():
    myLog.info("浏览器开始初始化,隐式暂停时间10s,浏览器最大化")

    try:
        # 1.自动下载
        driver = webdriver.Edge(EdgeChromiumDriverManager().install())
        # 2.指定驱动地址
        # driver = webdriver.Edge(driver_url)

        # 自动下载地址：C:\Users\30281\.wdm\drivers\edgedriver

        driver.implicitly_wait(10)
        driver.maximize_window()
        myLog.info("浏览器初始化完成")
    except:
        myLog.error("浏览器初始化失败，请稍后再试,报错信息为{}".format(traceback.format_exc()))
        raise "浏览器初始化失败"
    return driver

# 对象库层，封装初始化方法、元素操作方法
class BasePage():

    # 初始化driver
    def __init__(self,driver):
        self.driver = driver

    """2 打开指定页面"""
    def get_url(self,url):

        myLog.info("打开指定页面{}".format(url))
        try:
            self.driver.get(url)
        except:
            myLog.error("打开页面失败,报错信息{}".format(traceback.format_exc()))
            raise "页面打开失败"


    """3 元素定位"""
    def my_find_element(self,ele,time_out=10,time_c=0.5):
        """
        元素表达式:ele   长相:(By.XPATH,"//span[text()='搜索设置']")
        指定等待超时时间：time_out=10
        检查频率：time_c=0.5
        """
        myLog.info("查找指定元素,元素表达式为{}".format(ele))
        try:
            self.element = WebDriverWait(self.driver, time_out,time_c).until(EC.presence_of_element_located(ele))
        except:
            myLog.error("元素定位失败,报错信息{}".format(traceback.format_exc()))
            raise "元素定位失败"

    # 前置条件：调用3先进行元素定位
    """4 点击元素方法封装"""
    def my_click(self,ele,**kwargs):
        # 调用获取元素的方法
        self.my_find_element(ele,**kwargs)
        myLog.info("元素点击")
        self.element.click()

    # 前置条件：调用3先进行元素定位
    """5 输入框输入元素"""
    def my_input_send(self,ele,value,**kwargs):

        self.my_find_element(ele,**kwargs)
        myLog.info("元素输入内容{}".format(value))
        self.element.clear()
        self.element.send_keys(value)

    """6 获取cookie"""
    def get_cookie(self):
        self.cookies = self.driver.get_cookies()
        myLog.info("获取cookie成功，{}".format(self.cookies))

    """7 设置cookie"""
    def set_cookie(self,cookies):

        for cookie in cookies:
            self.driver.add_cookie(cookie)
        self.driver.refresh() # 设置之后需要刷新一下
        myLog.info("cookie设置成功")

    """返回文本信息,用于断言"""
    def get_info(self,ele,**kwargs):
        self.my_find_element(ele,**kwargs)
        return self.element.text

    """8 关闭浏览器页面，不建议使用__del__,可以显示你的调用，eg:objectB.driver.quit()
    因为我们的driver是同一个，那操作了一个模块就把driver干掉了是不行的
    所以我们直接放到最外层的conftest文件进行关闭，就是全部模块执行完在关闭
    """
    # def __del__(self):
    #     myLog.info("关闭浏览器页面")
    #     self.driver.quit()

# 1.获取cookie
# driver = create_get_driver()
# objectB = BasePage(driver)
# objectB.get_url(url=index_url)
# time.sleep(15)
# objectB.get_cookie()
# print(objectB.cookies)


